Extraer spec file

Escenario

Al instalar el paquete de mockoon obtenemos ciertos fallos de dependencias que en teoria si que están instaladas.

El error no hace referencia a ningún archivo concreto, solo menciona cosas como libnotify y libuuid

Si hago una busqueda con zypper para libuuid veo que tengo paquetes instalados para dicha librería:

Y lo mismo para libnotify:

Haciendo prueba veo que al instalar el paquete libnotify-tools si que se cumple la dependencia, ahora ya no sale el error de libnotify al instalar el paquete de mockoon:

Esto me lleva a la pregunta de: ¿en que se basa rpm para saber si se cumple una dependencia?

Extraer spec file de un .rpm

Para extraer (recrear en verdad) el spec file de un archivo rpm, usamos el siguiente comando:

rpmrebuild -e -p PAQUETE

Este comando nos abrirá el editor de texto (vim en mi caso), con el contenido del spec file, podemos modificarlo directamente y el comando regenerará el archivo rpm con los nuevos cambios

Escenario parte2

Quiero ver que contenido tiene el spec file del rpm de libnotify-tools, primero descargo el rpm con zypper:

zypper in --download-only libnotify-tools

Ahora lanzamos el comando para que recree el spec file:

rpmrebuild -e -p libnotify-tools-0.8.2-1.4.x86_64.rpm

En el archivo podemos ver una linea de provides que hace referencia exactamente a libnotify, esto lo usa rpm para saber que este paquete provee libnotify

Si hacemos lo mismo con alguno de los paquetes de libuuid podemos ver lo siguiente:

Como se puede ver ninguna linea provee libuuid la mas cercana es libuuid1 pero el string no coincide exactamente, porque la dependencia no se cumple.

Para terminar extraemos el spec file del rpm de mockoon y vemos lo siguiente:

Aqui podemos ver todas las dependencias del rpm incluidas las que nos fallan, ademas el comando rpmrebuild nos permite hacer una modificación en el spec y regenerar el archivo rpm, en este caso vamos a comentar la linea de nss y añadir un or libuuid1

NOTA: al comentar la linea de nss perderemos cierta funcionalidad que nos da ese paquete, pero nos dejará instalar el rpm, cuando intentemos ejecutar una funcionalidad relacionada con ese paquete probablemente el programa de algun error relacionado con que no puede encontrar algun .so

Guardamos el archivo (:wq) y nos preguntará si queremos continuar:

Le decimos que si, y al finalizar el comando se nos muestra donde se ha generado el nuevo rpm:

Ahora al intentar instalar el nuevo rpm que se ha generado podremos instalarlo sin problemas, ya que las dependencias que fallaban están resueltas (o directamente las hemos eliminado).

Tags

zypper | rpmrebuild